from rest_framework.serializers import ModelSerializer, IntegerField, BooleanField, Serializer

from erp_system.models import RolesModel

from erp_system.serializer.permission_serializer import PermissionsSerializer

class BaseRolesSerializer(ModelSerializer):
    """
        普通的序列化类，支持：新增、修改角色名、删除、查询
    """

    # 这里是序列化的嵌套，只是在查询的时候用，所以要求“只读”
    permissions = PermissionsSerializer(many=True, read_only=True)

    class Meta:
        model = RolesModel
        fields = '__all__'


class RolesPartialSerializer(ModelSerializer):
    """
        用于：给某一个角色批量授权的序列化
    """

    class Meta:
        model = RolesModel
        fields = ['id', 'permissions']  # 第二个参数permissions实际上是一个列表


class RoleSetPermissionSerializer(Serializer):
    """
        用于：给某一个角色，单一授权，也包括取消单一授权
    """

    # 角色ID：
    # write_only=True在这里，意思是只负责反序列化
    # required=True表示必传
    role_id = IntegerField(write_only=True, required=True)
    # 权限ID
    permission_id = IntegerField(write_only=True, required=True)
    # 是否是:新授予权限（True），还是取消权限（False）
    is_create = BooleanField(write_only=True, required=True)
